﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using WpfApplication2.Helpers;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.UserControls;
using System.Globalization;
using WpfApplication2.Validation;
using System.Reflection;
using System.ComponentModel;

namespace WpfApplication2.ViewModels.Afiliado
{
    public class NuevoAfiliadoViewModel : ViewModel
    {
        #region Properties

        public SindicatoWebService.Service1SoapClient WS;
        public Frame ContainerFrame { get; set; }
        public ModalDialog modalDialog
        {
            get;
            set;
        }


        public PropertyElement Apellido
        {
            get
            {
                return apellido;
            }
            set
            {
                if (apellido != value)
                {
                    apellido = value;
                    RaisePropertyChanged("Apellido");
                }
            }
        }
        private PropertyElement apellido;


        public PropertyElement Calle
        {
            get
            {
                return calle;
            }
            set
            {
                if (calle != value)
                {
                    calle = value;
                    RaisePropertyChanged("Calle");
                }
            }
        }
        private PropertyElement calle;


        public PropertyElement CalleNumero
        {
            get
            {
                return calleNumero;
            }
            set
            {
                if (calleNumero != value)
                {
                    calleNumero = value;
                    RaisePropertyChanged("CalleNumero");
                }
            }
        }
        private PropertyElement calleNumero;


        public PropertyElement CategoriaTitular
        {
            get
            {
                return categoriaTitular;
            }
            set
            {
                if (categoriaTitular != value)
                {
                    categoriaTitular = value;
                    RaisePropertyChanged("CategoriaTitular");
                }
            }
        }
        private PropertyElement categoriaTitular;

        public PropertyElement Censado
        {
            get
            {
                return censado;
            }
            set
            {
                if (censado != value)
                {
                    censado = value;
                    RaisePropertyChanged("Censado");
                }
            }
        }
        private PropertyElement censado;


        public PropertyElement CodigoPostal
        {
            get
            {
                return codigoPostal;
            }
            set
            {
                if (codigoPostal != value)
                {
                    codigoPostal = value;
                    RaisePropertyChanged("CodigoPostal");
                }
            }
        }
        private PropertyElement codigoPostal;


        public PropertyElement Cuil
        {
            get
            {
                return cuil;
            }
            set
            {
                if (cuil != value)
                {
                    cuil = value;
                    RaisePropertyChanged("Cuil");
                }
            }
        }
        private PropertyElement cuil;


        public PropertyElement Cuit
        {
            get
            {
                return cuit;
            }
            set
            {
                if (cuit != value)
                {
                    cuit = value;
                    RaisePropertyChanged("Cuit");
                }
            }
        }
        private PropertyElement cuit;


        public PropertyElement Delegacion
        {
            get
            {
                return delegacion;
            }
            set
            {
                if (delegacion != value)
                {
                    delegacion = value;
                    RaisePropertyChanged("Delegacion");
                }
            }
        }
        private PropertyElement delegacion;


        public PropertyElement Departamento
        {
            get
            {
                return departamento;
            }
            set
            {
                if (departamento != value)
                {
                    departamento = value;
                    RaisePropertyChanged("Departamento");
                }
            }
        }
        private PropertyElement departamento;


        public PropertyElement Discapacitado
        {
            get
            {
                return discapacitado;
            }
            set
            {
                if (discapacitado != value)
                {
                    discapacitado = value;
                    RaisePropertyChanged("Discapacitado");
                }
            }
        }
        private PropertyElement discapacitado;

        public EmpresaDTO Empresa
        {
            get
            {
                return empresa;
            }
            set
            {
                if (empresa != value)
                {
                    empresa = value;
                    RaisePropertyChanged("Empresa");
                }
            }
        }
        private EmpresaDTO empresa;

        public string EmpresaId
        {
            get
            {
                return empresaId;
            }
            set
            {
                if (empresaId != value)
                {
                    empresaId = value;
                    RaisePropertyChanged("EmpresaId");
                }
            }
        }
        private string empresaId;


        public EmpresaDTO EmpresaNueva
        {
            get
            {
                return empresaNueva;
            }
            set
            {
                if (empresaNueva != value)
                {
                    empresaNueva = value;
                    RaisePropertyChanged("EmpresaNueva");
                }
            }
        }
        private EmpresaDTO empresaNueva;

        public EmpresaDTO[] EmpresasCollection
        {
            get
            {
                return empresasCollection;
            }
            set
            {
                if (empresasCollection != value)
                {
                    empresasCollection = value;
                    RaisePropertyChanged("EmpresasCollection");
                }
            }
        }
        private EmpresaDTO[] empresasCollection;

        public PropertyElement EntidadEmisora
        {
            get
            {
                return entidadEmisora;
            }
            set
            {
                if (entidadEmisora != value)
                {
                    entidadEmisora = value;
                    RaisePropertyChanged("EntidadEmisora");
                }
            }
        }
        private PropertyElement entidadEmisora;


        public EstadoCivilDTO[] EstadosCivilesCollection
        {
            get
            {
                return estadosCivilesCollection;
            }
            set
            {
                if (estadosCivilesCollection != value)
                {
                    estadosCivilesCollection = value;
                    RaisePropertyChanged("EstadosCivilesCollection");
                }
            }
        }
        private EstadoCivilDTO[] estadosCivilesCollection;

        public PropertyElement EstadoCivil
        {
            get
            {
                return estadoCivil;
            }
            set
            {
                if (estadoCivil != value)
                {
                    estadoCivil = value;
                    RaisePropertyChanged("EstadoCivil");
                }
            }
        }
        private PropertyElement estadoCivil;


        public PropertyElement Estudia
        {
            get
            {
                return estudia;
            }
            set
            {
                if (estudia != value)
                {
                    estudia = value;
                    RaisePropertyChanged("Estudia");
                }
            }
        }
        private PropertyElement estudia;


        //public PropertyElement FechaExcepcion
        //{
        //    get
        //    {
        //        return fechaExcepcion;
        //    }
        //    set
        //    {
        //        if (fechaExcepcion != value)
        //        {
        //            fechaExcepcion = value;
        //            RaisePropertyChanged("FechaExcepcion");
        //        }
        //    }
        //}
        //private PropertyElement fechaExcepcion;


        public PropertyElement FechaIngreso
        {
            get
            {
                return fechaIngreso;
            }
            set
            {
                if (fechaIngreso != value)
                {
                    fechaIngreso = value;
                    RaisePropertyChanged("FechaIngreso");
                }
            }
        }
        private PropertyElement fechaIngreso;


        public PropertyElement FechaNacimiento
        {
            get
            {
                return fechaNacimiento;
            }
            set
            {
                if (fechaNacimiento != value)
                {
                    fechaNacimiento = value;
                    RaisePropertyChanged("FechaNacimiento");
                }
            }
        }
        private PropertyElement fechaNacimiento;


        public PropertyElement Filial
        {
            get
            {
                return filial;
            }
            set
            {
                if (filial != value)
                {
                    filial = value;
                    RaisePropertyChanged("Filial");
                }
            }
        }
        private PropertyElement filial;


        public PropertyElement Localidad
        {
            get
            {
                return localidad;
            }
            set
            {
                if (localidad != value)
                {
                    localidad = value;
                    RaisePropertyChanged("Localidad");
                }
            }
        }
        private PropertyElement localidad;


        public LocalidadDTO[] LocalidadesCollection
        {
            get
            {
                return localidadesCollection;
            }
            set
            {
                if (localidadesCollection != value)
                {
                    localidadesCollection = value;
                    RaisePropertyChanged("LocalidadesCollection");
                }
            }
        }
        private LocalidadDTO[] localidadesCollection;


        public PropertyElement Nacionalidad
        {
            get
            {
                return nacionalidad;
            }
            set
            {
                if (nacionalidad != value)
                {
                    nacionalidad = value;
                    RaisePropertyChanged("Nacionalidad");
                }
            }
        }
        private PropertyElement nacionalidad;


        public PropertyElement NivelDiscapacidad
        {
            get
            {
                return nivelDiscapacidad;
            }
            set
            {
                if (nivelDiscapacidad != value)
                {
                    nivelDiscapacidad = value;
                    RaisePropertyChanged("NivelDiscapacidad");
                }
            }
        }
        private PropertyElement nivelDiscapacidad;


        public PropertyElement NivelEstudio
        {
            get
            {
                return nivelEstudio;
            }
            set
            {
                if (nivelEstudio != value)
                {
                    nivelEstudio = value;
                    RaisePropertyChanged("NivelEstudio");
                }
            }
        }
        private PropertyElement nivelEstudio;


        public PropertyElement Nombre
        {
            get
            {
                return nombre;
            }
            set
            {
                if (nombre != value)
                {
                    nombre = value;
                    RaisePropertyChanged("Nombre");
                }
            }
        }
        private PropertyElement nombre;


        public PropertyElement NombreEmpresa
        {
            get
            {
                return nombreEmpresa;
            }
            set
            {
                if (nombreEmpresa != value)
                {
                    nombreEmpresa = value;
                    RaisePropertyChanged("NombreEmpresa");
                }
            }
        }
        private PropertyElement nombreEmpresa;


        public PropertyElement NroAfiliadoTitular
        {
            get
            {
                return nroAfiliadoTitular;
            }
            set
            {
                if (nroAfiliadoTitular != value)
                {
                    nroAfiliadoTitular = value;
                    RaisePropertyChanged("NroAfiliadoTitular");
                }
            }
        }
        private PropertyElement nroAfiliadoTitular;


        public PropertyElement NroAfiliadoFamiliar
        {
            get
            {
                return nroAfiliadoFamiliar;
            }
            set
            {
                if (nroAfiliadoFamiliar != value)
                {
                    nroAfiliadoFamiliar = value;
                    RaisePropertyChanged("NroAfiliadoFamiliar");
                }
            }
        }
        private PropertyElement nroAfiliadoFamiliar;


        public PropertyElement NroInternoTitular
        {
            get
            {
                return nroInternoTitular;
            }
            set
            {
                if (nroInternoTitular != value)
                {

                    nroInternoTitular = value;
                    RaisePropertyChanged("NroInternoTitular");
                }
            }
        }
        private PropertyElement nroInternoTitular;


        public PropertyElement NroInternoFamiliar
        {
            get
            {
                return nroInternoFamiliar;
            }
            set
            {
                if (nroInternoFamiliar != value)
                {
                    nroInternoFamiliar = value;
                    RaisePropertyChanged("NroInternoFamiliar");
                }
            }
        }
        private PropertyElement nroInternoFamiliar;


        public PropertyElement NumeroDocumento
        {
            get
            {
                return numeroDocumento;
            }
            set
            {
                if (numeroDocumento != value)
                {
                    numeroDocumento = value;
                    RaisePropertyChanged("NumeroDocumento");
                }
            }
        }
        private PropertyElement numeroDocumento;

        public string OpcionEmpresa
        {
            get
            {
                if (opcionEmpresa == "NuevaEmpresa")
                {
                    OpcionEmpresaNueva = Visibility.Visible;
                    OpcionEmpresaSeleccionar = Visibility.Collapsed;
                }
                else
                {
                    OpcionEmpresaNueva = Visibility.Collapsed;
                    OpcionEmpresaSeleccionar = Visibility.Visible;
                }
                return opcionEmpresa;
            }
            set
            {
                if (opcionEmpresa != value)
                {
                    opcionEmpresa = value;
                    RaisePropertyChanged("OpcionEmpresa");
                }
            }
        }
        private string opcionEmpresa;

        public Visibility OpcionEmpresaNueva
        {
            get
            {
                return opcionEmpresaNueva;
            }
            set
            {
                if (opcionEmpresaNueva != value)
                {
                    opcionEmpresaNueva = value;
                    RaisePropertyChanged("OpcionEmpresaNueva");
                }
            }
        }
        private Visibility opcionEmpresaNueva;
        
        public Visibility OpcionEmpresaSeleccionar
        {
            get
            {
                return opcionEmpresaSeleccionar;
            }
            set
            {
                if (opcionEmpresaSeleccionar != value)
                {
                    opcionEmpresaSeleccionar = value;
                    RaisePropertyChanged("OpcionEmpresaSeleccionar");
                }
            }
        }
        private Visibility opcionEmpresaSeleccionar;


        public PropertyElement Pallier
        {
            get
            {
                return pallier;
            }
            set
            {
                if (pallier != value)
                {
                    pallier = value;
                    RaisePropertyChanged("Pallier");
                }
            }
        }
        private PropertyElement pallier;


        public ParentescoDTO[] ParentescosCollection
        {
            get
            {
                return parentescosCollection;
            }
            set
            {
                if (parentescosCollection != value)
                {
                    parentescosCollection = value;
                    RaisePropertyChanged("ParentescosCollection");
                }
            }
        }
        private ParentescoDTO[] parentescosCollection;

        public PropertyElement Parentesco
        {
            get
            {
                return parentesco;
            }
            set
            {
                if (parentesco != value)
                {
                    parentesco = value;
                    RaisePropertyChanged("Parentesco");
                }
            }
        }
        private PropertyElement parentesco;


        public PropertyElement Piso
        {
            get
            {
                return piso;
            }
            set
            {
                if (piso != value)
                {
                    piso = value;
                    RaisePropertyChanged("Piso");
                }
            }
        }
        private PropertyElement piso;


        public PropertyElement Provincia
        {
            get
            {
                return provincia;
            }
            set
            {
                if (provincia != value)
                {
                    provincia = value;
                    RaisePropertyChanged("Provincia");
                }
            }
        }
        private PropertyElement provincia;


        public ProvinciaDTO[] ProvinciasCollection
        {
            get
            {
                return provinciasCollection;
            }
            set
            {
                if (provinciasCollection != value)
                {
                    provinciasCollection = value;
                    RaisePropertyChanged("ProvinciasCollection");
                }
            }
        }
        private ProvinciaDTO[] provinciasCollection;


        public string SeleccionarEmpresaForeground
        {
            get
            {
                return seleccionarEmpresaForeground;
            }
            set
            {
                if (seleccionarEmpresaForeground != value)
                {
                    seleccionarEmpresaForeground = value;
                    RaisePropertyChanged("SeleccionarEmpresaForeground");
                }
            }
        }
        private string seleccionarEmpresaForeground;
        

        public PropertyElement Sexo
        {
            get
            {
                return sexo;
            }
            set
            {
                if (sexo != value)
                {
                    sexo = value;
                    RaisePropertyChanged("Sexo");
                }
            }
        }
        private PropertyElement sexo;


        public PropertyElement Telefono
        {
            get
            {
                return telefono;
            }
            set
            {
                if (telefono != value)
                {
                    telefono = value;
                    RaisePropertyChanged("Telefono");
                }
            }
        }
        private PropertyElement telefono;


        public PropertyElement TelefonoAuxiliar
        {
            get
            {
                return telefonoAuxiliar;
            }
            set
            {
                if (telefonoAuxiliar != value)
                {
                    telefonoAuxiliar = value;
                    RaisePropertyChanged("TelefonoAuxiliar");
                }
            }
        }
        private PropertyElement telefonoAuxiliar;


        public PropertyElement TipoDocumento
        {
            get
            {
                return tipoDocumento;
            }
            set
            {
                if (tipoDocumento != value)
                {
                    tipoDocumento = value;
                    RaisePropertyChanged("TipoDocumento");
                }
            }
        }
        private PropertyElement tipoDocumento;

        public PropertyElement Trabaja
        {
            get
            {
                return trabaja;
            }
            set
            {
                if (trabaja != value)
                {
                    trabaja = value;
                    RaisePropertyChanged("Trabaja");
                }
            }
        }
        private PropertyElement trabaja;

        public PropertyElement Transferido
        {
            get
            {
                return transferido;
            }
            set
            {
                if (transferido != value)
                {
                    transferido = value;
                    RaisePropertyChanged("Transferido");
                }
            }
        }
        private PropertyElement transferido;


        
        #endregion

        public NuevoAfiliadoViewModel(Frame frame, ModalDialog modal)
        {
            WS = new SindicatoWebService.Service1SoapClient();
            modalDialog = modal;
            ContainerFrame = frame;
            InicializarPropiedades();
            CargarControles();

            
        }

        private void InicializarPropiedades()
        {
            //Inicializacion de propiedades:
            Apellido = new PropertyElement() { Foreground = "White", Name="Apellido" };
            Calle= new PropertyElement() { Foreground = "White", Name = "Calle" };
            CalleNumero= new PropertyElement() { Foreground = "White", Name="CalleNumero" };
            CategoriaTitular= new PropertyElement() { Foreground = "White", Name="CategoriaTitular" };
            Censado= new PropertyElement() { Foreground = "White", Name="Censado" };
            CodigoPostal= new PropertyElement() { Foreground = "White", Name="CodigoPostal" };
            Cuil= new PropertyElement() { Foreground = "White", Name="Cuil" };
            Cuit= new PropertyElement() { Foreground = "White", Name="Cuit" };
            Delegacion= new PropertyElement() { Foreground = "White", Name="Delegacion" };
            Departamento= new PropertyElement() { Foreground = "White", Name="Departamento" };
            Discapacitado= new PropertyElement() { Foreground = "White", Name="Discapacitado" };
            EntidadEmisora= new PropertyElement() { Foreground = "White", Name="EntidadEmisora" };
            EstadoCivil= new PropertyElement() { Foreground = "White", Name="EstadoCivil" };
            Estudia= new PropertyElement() { Foreground = "White", Name="Estudia" };
            //FechaExcepcion= new PropertyElement() { Foreground = "White", Name="FechaExcepcion" };
            FechaNacimiento= new PropertyElement() { Foreground = "White", Name="FechaNacimiento" };
            FechaIngreso= new PropertyElement() { Foreground = "White", Name="FechaIngreso" };
            Filial= new PropertyElement() { Foreground = "White", Name="Filial" };
            Localidad= new PropertyElement() { Foreground = "White", Name="Localidad" };
            //MotivoExcepcion= new PropertyElement() { Foreground = "White", Name="MotivoExcepcion" };
            Nacionalidad= new PropertyElement() { Foreground = "White", Name="Nacionalidad" };
            NivelEstudio= new PropertyElement() { Foreground = "White", Name="NivelEstudio" };
            NivelDiscapacidad= new PropertyElement() { Foreground = "White", Name="NivelDiscapacidad" };
            Nombre= new PropertyElement() { Foreground = "White", Name="Nombre" };
            NombreEmpresa= new PropertyElement() { Foreground = "White", Name="NombreEmpresa" };
            NroAfiliadoFamiliar= new PropertyElement() { Foreground = "White", Name="NroAfiliadoFamiliar" };
            NroAfiliadoTitular= new PropertyElement() { Foreground = "White", Name="NroAfiliadoTitular" };
            NroInternoFamiliar= new PropertyElement() { Foreground = "White", Name="NroInternoFamiliar" };
            NroInternoTitular= new PropertyElement() { Foreground = "White", Name="NroInternoTitular" };
            NumeroDocumento= new PropertyElement() { Foreground = "White", Name="NumeroDocumento" };
            Pallier= new PropertyElement() { Foreground = "White" , Name="Pallier"};
            Parentesco= new PropertyElement() { Foreground = "White", Name="Parentesco" };
            Piso= new PropertyElement() { Foreground = "White", Name="Piso" };
            Provincia= new PropertyElement() { Foreground = "White", Name="Provincia" };
            SeleccionarEmpresaForeground = "White";
            Sexo= new PropertyElement() { Foreground = "White", Name="Sexo" };
            Telefono= new PropertyElement() { Foreground = "White", Name="Telefono" };
            TelefonoAuxiliar= new PropertyElement() { Foreground = "White", Name="TelefonoAuxiliar" };
            TipoDocumento= new PropertyElement() { Foreground = "White", Name="TipoDocumento" };
            Trabaja= new PropertyElement() { Foreground = "White", Name="Trabaja" };
            Transferido= new PropertyElement() { Foreground = "White", Name="Transferido" };

            //Seleccionar las propiedades que se quieren validar
            ValidationList = new List<PropertyElement>();

            Apellido.Validations.Add(ValidationType.Requerido);
            Calle.Validations.Add(ValidationType.Requerido);
            CalleNumero.Validations.Add(ValidationType.Requerido);
            CategoriaTitular.Validations.Add(ValidationType.Requerido);
            Censado.Validations.Add(ValidationType.Requerido);
            CodigoPostal.Validations.Add(ValidationType.Requerido);
            Cuil.Validations.Add(ValidationType.Requerido);
            Cuit.Validations.Add(ValidationType.Requerido);
            //Delegacion.Validations.Add(ValidationType.Requerido);
            //Departamento.Validations.Add(ValidationType.Requerido);
            Discapacitado.Validations.Add(ValidationType.Requerido);
            EntidadEmisora.Validations.Add(ValidationType.Requerido);
            EstadoCivil.Validations.Add(ValidationType.Requerido);
            Estudia.Validations.Add(ValidationType.Requerido);
            FechaNacimiento.Validations.Add(ValidationType.Requerido);
            FechaIngreso.Validations.Add(ValidationType.Requerido);
            //Filial.Validations.Add(ValidationType.Requerido);
            Localidad.Validations.Add(ValidationType.Requerido);
            Nacionalidad.Validations.Add(ValidationType.Requerido);
            NivelDiscapacidad.Validations.Add(ValidationType.Requerido);
            NivelEstudio.Validations.Add(ValidationType.Requerido);
            Nombre.Validations.Add(ValidationType.Requerido);
            NombreEmpresa.Validations.Add(ValidationType.Requerido);
            NumeroDocumento.Validations.Add(ValidationType.Requerido);
            Parentesco.Validations.Add(ValidationType.Requerido);
            Provincia.Validations.Add(ValidationType.Requerido);
            Cuil.Validations.Add(ValidationType.Requerido);
            Sexo.Validations.Add(ValidationType.Requerido);
            Telefono.Validations.Add(ValidationType.Requerido);
            TelefonoAuxiliar.Validations.Add(ValidationType.Requerido);
            TipoDocumento.Validations.Add(ValidationType.Requerido);
            Trabaja.Validations.Add(ValidationType.Requerido);
            Transferido.Validations.Add(ValidationType.Requerido);

            ValidationList.Add(Apellido);
            ValidationList.Add(Calle);
            ValidationList.Add(CalleNumero);
            ValidationList.Add(CategoriaTitular);
            ValidationList.Add(Censado);
            ValidationList.Add(CodigoPostal);
            ValidationList.Add(Cuil);
            //ValidationList.Add(Delegacion);
            //ValidationList.Add(Departamento);
            ValidationList.Add(Discapacitado);
            ValidationList.Add(EntidadEmisora);
            ValidationList.Add(EstadoCivil);
            ValidationList.Add(Estudia);
            ValidationList.Add(FechaNacimiento);
            ValidationList.Add(FechaIngreso);
            //ValidationList.Add(Filial);
            //ValidationList.Add(Localidad);
            ValidationList.Add(Nacionalidad);
            ValidationList.Add(NivelEstudio);
            ValidationList.Add(Nombre);
            //ValidationList.Add(NombreEmpresa);
            ValidationList.Add(NumeroDocumento);
            ValidationList.Add(Parentesco);
            //ValidationList.Add(Provincia);
            ValidationList.Add(Cuil);
            ValidationList.Add(Sexo);
            ValidationList.Add(Telefono);
            ValidationList.Add(TelefonoAuxiliar);
            ValidationList.Add(TipoDocumento);
            ValidationList.Add(Trabaja);
            ValidationList.Add(Transferido);

        }

        private void CargarControles()
        {
            ParentescosCollection = WS.GetParentescos();
            EstadosCivilesCollection = WS.GetEstadosCiviles();
            EmpresasCollection = WS.GetEmpresas();
            ProvinciasCollection = WS.GetProvincias();
            OpcionEmpresa = "BuscarEmpresa";
            //TODO: Agregar delegaciones, filiales, provincias, localidades
        }

        #region command
                
        private DelegateCommand saveAfiliado;

        public ICommand SaveAfiliado
        {
            get
            {
                if (saveAfiliado == null)
                {
                    saveAfiliado = new DelegateCommand(Save, CanExecute);
                }
                return saveAfiliado;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void Save()
        {
            //VALIDACIONES PARTICULARES:

            bool valid = true;
            //validar nivel de discapacidad si Discapacitado está checkeado:
            if (Discapacitado.Value == "SI")
                valid = valid && ValidacionParticular(NivelDiscapacidad);
            else
            {
                NivelDiscapacidad.Foreground = "White";
                RaisePropertyChanged(NivelDiscapacidad.Name);
            }
            //fin validar discapacitado

            //validar empresas:
            bool validEmpresa = true;
            if (OpcionEmpresa == "NuevaEmpresa")
            {
                bool validEmpresaCuit = validEmpresa && ValidacionParticular(Cuit);
                bool validEmpresaNombre = validEmpresa && ValidacionParticular(NombreEmpresa);
                valid = valid && validEmpresaCuit && validEmpresaNombre;
            }
            else
            {
                if (Empresa == null)
                {
                    validEmpresa = false;
                    SeleccionarEmpresaForeground = "#bb0000";
                    RaisePropertyChanged("SeleccionarEmpresaForeground");
                }
                else
                {
                    validEmpresa = true;
                    SeleccionarEmpresaForeground = "White";
                    RaisePropertyChanged("SeleccionarEmpresaForeground");
                }
                valid = valid && validEmpresa;
            }
            //fin validar empresa

            if (DataIsValid && valid)
            {
                //Verificar si la nueva empresa que ingresa tiene el mismo Cuit que alguna ya existente:
                if (OpcionEmpresa == "NuevaEmpresa")
                {
                    if (EmpresasCollection.Where(x => x.Cuit == Cuit.Value).ToList().Count() > 0)
                    {
                        Cuit.Foreground = "#bb0000";
                        Cuit.IsValid = false;
                        RaisePropertyChanged("Cuit");
                        modalDialog.ShowHandlerDialog(String.Format("Ya existe una empresa con cuit: {0}. Por favor verifique nuevamente los datos de la empresa.", Cuit.Value));
                    }
                    else
                    {
                        EmpresaId = WS.GuardarEmpresa(FormatHelper.FirstWordToUpper(NombreEmpresa.Value), Cuit.Value).ToString();
                        GuardarAfiliado();
                        modalDialog.ShowHandlerDialog("El afiliado se guardó correctamente");
                    }
                }
                else
                {
                    Cuit.Foreground = "White";
                    //Cuit.IsValid = false;
                    RaisePropertyChanged("Cuit");
                    EmpresaId = Empresa.Id.ToString();
                    GuardarAfiliado();
                    modalDialog.ShowHandlerDialog("El afiliado se guardó correctamente");
                }


            }
            else
            {
                var res = modalDialog.ShowHandlerDialog("Los datos del afiliado son inválidos. Por favor complete correctamente los campos sobresaltados");
            }
            
            
        }

        private void GuardarAfiliado()
        {
            WS.GuardarAfiliado(
                Transferido.Value,
                NroInternoTitular.Value,
                NroInternoFamiliar.Value,
                NroAfiliadoTitular.Value,
                NroAfiliadoFamiliar.Value,
                FechaNacimiento.Value,
                FormatHelper.AllWordsToUpper(Nombre.Value),
                FormatHelper.AllWordsToUpper(Apellido.Value),
                Cuil.Value,
                FormatHelper.FirstWordToUpper(Nacionalidad.Value),
                Sexo.Value,
                EstadoCivil.Value,
                Discapacitado.Value,
                NivelDiscapacidad.Value,
                Estudia.Value,
                NivelEstudio.Value,
                Trabaja.Value,
                Censado.Value,
                Parentesco.Value,
                Delegacion.Value,
                Filial.Value,
                FormatHelper.FirstWordToUpper(Calle.Value),
                CalleNumero.Value,
                Piso.Value,
                Departamento.Value,
                Pallier.Value,
                Telefono.Value,
                TelefonoAuxiliar.Value,
                Provincia.Value,
                Localidad.Value,
                CodigoPostal.Value,
                TipoDocumento.Value,
                NumeroDocumento.Value,
                EntidadEmisora.Value,
                CategoriaTitular.Value,
                EmpresaId,
                FechaIngreso.Value,
                DateTime.Now.Year.ToString(),
                null,
                null
            );
        }

        #endregion
    }
}
